package com.itheima.d3_regex;

import java.util.Arrays;

/*
目标：String类的替换和切割方法
 */
public class Demo5 {
    public static void main(String[] args) {
        // 1、public String replaceAll(String regex , String newStr)：按照正则表达式匹配的内容进行替换
        // 需求1：请把下面字符串中的不是汉字的部分替换为 “-”
        String s1 = "古力_娜扎ai8888迪丽热巴999aa5566马尔扎哈fbbfsfs42425卡尔扎巴";
        //1.1 定义s1中不是汉字部分内容的正则
        String regex1 = "\\w+"; // 一个或多个单词字符

        //1.2 调用replaceAll方法，传入正则，用"-"替换
        String str1 = s1.replaceAll(regex1, "-");
        System.out.println(str1);

        // 需求2(拓展)：某语音系统，收到一个口吃的人说的“我我我喜欢编编编编编编编编编编编编程程程！”，需要优化成“我喜欢编程！”。
        String s2 = "我我我喜欢编编编编编编编编编编编编程程程";
        // 2.1 口吃的人，任何符号都可能出现叠字，正则中代表任意符号的是.
        System.out.println("我".matches("."));
        System.out.println("我我我".matches("..+"));
        System.out.println("我爱你".matches("..+"));
        System.out.println("-------------");

        // 2.2 需要将匹配上的前一个字符，拿到后面继续用！比如.匹配到了'我'，需要将'我'拿到后面继续用
        //解决方案：先分组再捕获！分组用()，捕获用\\序号
        System.out.println("我我我".matches("(.)\\1+"));
        System.out.println("我我".matches("(.)\\1+"));
        System.out.println("我爱你".matches("(.)\\1+"));
        System.out.println("-------------");

        //2.3 调用s2的replaceAll方法，将正则传入，匹配重复的叠字
        //方法第二个参数，需要拿到第一个参数中(.)匹配到的字符。还需要进行捕获，这个捕获的格式是：$序号
        String str2 = s2.replaceAll("(.)\\1+", "$1");
        // 过程：在s2中用"(.)\\1+"发现了"我我我"，然后参数"$1"，在"(.)\\1+"正则中拿到第一组匹配的字符"我"，替换了"我我我"
        System.out.println(str2);
        System.out.println("-------------");

        // 2、public String[] split(String regex)：按照正则表达式匹配的内容进行分割字符串，反回一个字符串数组。
        // 需求1：请把下面字符串中的人名取出来，使用切割来做
        String s3 = "古力娜扎ai8888迪丽热巴999aa5566马尔扎哈fbbfsfs42425卡尔扎巴";
        String regex = "\\w+";
        String[] arr = s3.split(regex);
        System.out.println(Arrays.toString(arr));
    }
}
